package com.cskaoyan.javase.method._0introduction;

/**
 * 全新的版本,使用方法来复用代码.
 *
 * 方法的语法结构:
 * [修饰符列表] 返回值类型 方法名 (形式参数列表){
 * 	//方法体
 * }
 * 解释语法之前,先了解两个概念:
 * 1.[修饰符列表] 返回值类型 方法名 (形式参数列表) 这一块加起来 总体称之为"方法头"或者叫做"方法的声明"
 * 2.方法名 (形式参数列表) 合起来称之为"方法的签名"
 * 接下来,逐一解释各个结构:
 *      1.[修饰符列表],修饰符组成的列表,在当前这个阶段,修饰符我们还没有学习过,我们只需要知道两点:
 *          a.修饰符列表是可以省略,完全不写任何修饰的
 *          b.我们默认修饰符列表是public static(这是现阶段的规定,不是方法就该是这样)
 *      2.返回值类型,指的是返回值的数据类型
 *          返回值: 方法是可以给出一个结果的,这个结果称之为返回值,返回值可以给方法外部去使用.方法同样可以没有返回值
 *          返回值类型可以是基本数据类型还可以是引用数据类型
 *      3.方法名,为了方便去调用一个方法,方法需要一个名字,它的名字是一个标识符,遵循"小驼峰"的命名规则
 *          并且方法多数是为了实现功能,表示某种操作,所以方法名尽量选择动词
 *          比如一个方法用来求和,应该叫"getSum"
 *          方法名的核心追求是"见名知意"一个好的方法名,应该通过名字就能够知道这个方法的用途
 *          为了清晰地表示方法的用途,不要害怕名字很长 getMaxValueByXxx
 *      4.形式参数列表,形式参数组成的列表,意味着形式参数可能不止一个,多个形式参数用","隔开.方法可以没有形式参数
 *          形式参数: 简称"形参",方法在实现时,有时需要传入数据,那么形参的作用就是规定传入数据的数据类型和个数
 *              形参的数据类型可以是基本数据类型,也可以是引用数据类型
 *              形参在传入方法后,需要在方法内部使用,所以需要给一个名字.
 *              形参的语法:
 *                  数据类型 形参名;
 *      5.方法体: 方法为了实现功能,需要执行一些代码,这就是方法体.
 *
 * 接下来,使用方法来改进案例:
 *  1. 编写程序，计算10+20，并输出结果
 *  2. 编写程序，计算111+222，并输出结果
 *  3. 编写程序，计算333+444，并输出结果
 *
 * 方法的定义:
 *  1.方法必须定义在类体当中,也不能嵌套定义.
 *  2.如果方法的返回值类型,明确说明方法会返回一个值,那么就必须在方法体,使用"return 变量/值/表达式等"来表示该返回值.
 *
 *  方法的调用(invoke):
 *  1.java程序的入口方法是main方法,任何其它方法想要被执行,就必须在main方法中直接或者间接调用它.方法不调用不生效.
 *  2.在同一个类中的main方法中,对于有"static"关键字修饰的方法,调用方式是:直接在main方法中写其它的方法名调用.
 *  3.如果方法的形参中明确规定方法需要传入参数,那么在调用时,就必须按照规则填入参数(数据类型要对应,数量要一样).这种在调用方法时,实际填入的参数,称之为"实际参数",简称"实参"
 *  4.对于有返回值的方法,最好要使用它的返回值
 *
 * 注意事项:
 *  1.一个类中的多个方法是平行关系,方法定义的位置对方法的调用结果没有任何影响
 *  2.对于一个有返回值的方法,操作它的方法调用,就是操作它的返回值.
 *
 * @since 17:42
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class NewDemo {

    public static void main(String[] args) {
        // Result of 'NewDemo.sumValueBy2Num()' is ignored
        // Return value of the method is never used
        int sum = sumValueBy2Num(10, 10);
        System.out.println(sum);

        System.out.println(sumValueBy2Num(20, 20));

    }

    // 定义方法,完成需求: 求两个int类型整数的和
    // Access can be private 权限应该私有化(挖坑,面向对象填)
    public static int sumValueBy2Num(int num1, int num2) {
        // Local variable 'sum' is redundant
        // int sum = num1 + num2;
        // Missing return statement
        return num1 + num2;
    }


}
